// 微信登录工具类
export interface WechatLoginResult {
  code: string
  phone?: string
}

// 微信登录相关工具函数
export class WechatLoginUtils {

  /**
   * 获取微信登录code
   * 在微信小程序中调用 wx.login() 获取临时登录凭证
   */
  static async getWechatCode(): Promise<string> {
    return new Promise((resolve, reject) => {
      // #ifdef MP-WEIXIN
      wx.login({
        success: (res) => {
          if (res.code) {
            resolve(res.code)
          } else {
            reject(new Error('获取微信登录code失败'))
          }
        },
        fail: (err) => {
          reject(new Error('微信登录失败: ' + err.errMsg))
        }
      })
      // #endif

      // #ifndef MP-WEIXIN
      // 非微信小程序环境，模拟获取code
      uni.showModal({
        title: '提示',
        content: '当前环境不支持微信登录，请使用账号密码登录',
        showCancel: false
      })
      reject(new Error('当前环境不支持微信登录'))
      // #endif
    })
  }

  /**
   * 获取微信用户手机号
   * 在微信小程序中使用手机号快速验证组件
   */
  static async getWechatPhone(): Promise<string> {
    return new Promise((resolve, reject) => {
      // #ifdef MP-WEIXIN
      // 使用手机号快速验证组件
      // 注意：这需要在页面中使用 <button open-type="getPhoneNumber"> 组件
      // 这里提供一个通用的获取方式
      uni.showModal({
        title: '获取手机号',
        content: '请通过手机号快速验证组件获取手机号',
        showCancel: false
      })
      resolve('')
      // #endif

      // #ifndef MP-WEIXIN
      reject(new Error('当前环境不支持获取微信用户信息'))
      // #endif
    })
  }

  /**
   * 处理微信手机号授权回调
   * 用于处理 <button open-type="getPhoneNumber"> 的回调
   */
  static handlePhoneNumberCallback(e: any): Promise<string> {
    return new Promise((resolve, reject) => {
      // #ifdef MP-WEIXIN
      if (e.detail.code) {
        // 这里需要将 code 发送到后端解密获取手机号
        // 暂时返回空字符串，实际使用时需要调用后端接口
        resolve('')
      } else {
        reject(new Error('用户拒绝授权手机号'))
      }
      // #endif

      // #ifndef MP-WEIXIN
      reject(new Error('当前环境不支持获取微信用户信息'))
      // #endif
    })
  }

  /**
   * 检查是否在微信小程序环境
   */
  static isWechatMiniProgram(): boolean {
    // #ifdef MP-WEIXIN
    return true
    // #endif

    // #ifndef MP-WEIXIN
    return false
    // #endif
  }

  /**
   * 检查是否在微信浏览器环境
   */
  static isWechatBrowser(): boolean {
    // #ifdef H5
    const ua = navigator.userAgent.toLowerCase()
    return ua.includes('micromessenger')
    // #endif

    // #ifndef H5
    return false
    // #endif
  }

  /**
   * 获取微信授权信息
   */
  static async getWechatAuthInfo(): Promise<WechatLoginResult> {
    const code = await this.getWechatCode()

    // 在微信小程序中，手机号需要通过其他方式获取
    // 这里返回空的手机号，实际使用时需要根据业务逻辑处理
    return {
      code,
      phone: '',
    }
  }
}

// 手机号验证工具
export class PhoneUtils {
  /**
   * 验证手机号格式
   */
  static validatePhone(phone: string): boolean {
    const phoneRegex = /^1[3-9]\d{9}$/
    return phoneRegex.test(phone)
  }

  /**
   * 格式化手机号
   */
  static formatPhone(phone: string): string {
    return phone.replace(/(\d{3})(\d{4})(\d{4})/, '$1****$3')
  }
}
